GdkWindow *wrapper;
- /* The wl_outputs that this window currently touches */
- GSList *outputs;
-
- struct wl_surface *wl_surface;
-
- struct xdg_surface *xdg_surface;
- struct xdg_popup *xdg_popup;
- struct gtk_surface *gtk_surface;
-
- struct wl_subsurface *wl_subsurface;
+ struct {
+ /* The wl_outputs that this window currently touches */
+ GSList *outputs;
+
+ struct wl_surface *wl_surface;
+ struct xdg_surface *xdg_surface;
+ struct xdg_popup *xdg_popup;
+ struct gtk_surface *gtk_surface;
+ struct wl_subsurface *wl_subsurface;
+ struct wl_egl_window *egl_window;
+ struct wl_egl_window *dummy_egl_window;
+ } display_server;
- struct wl_egl_window *egl_window;
EGLSurface egl_surface;
-
- struct wl_egl_window *dummy_egl_window;
EGLSurface dummy_egl_surface;
unsigned int mapped : 1;
window->height = height;
impl->scale = scale;
- if (impl->egl_window)
+ if (impl->display_server.egl_window)
{
- wl_egl_window_resize (impl->egl_window,
+ wl_egl_window_resize (impl->display_server.egl_window,
width * scale,
height * scale,
0, 0);
- wl_surface_set_buffer_scale (impl->wl_surface, scale);
+ wl_surface_set_buffer_scale (impl->display_server.wl_surface, scale);
}
area.x = 0;
return;
timings->refresh_interval = 16667; /* default to 1/60th of a second */
- if (impl->outputs)
+ if (impl->display_server.outputs)
{
/* We pick a random output out of the outputs that the window touches
* The rate here is in milli-hertz */
int refresh_rate = _gdk_wayland_screen_get_output_refresh_rate (wayland_display->screen,
- impl->outputs->data);
+ impl->display_server.outputs->data);
if (refresh_rate != 0)
timings->refresh_interval = G_GINT64_CONSTANT(1000000000) / refresh_rate;
}
impl->pending_frame_counter = gdk_frame_clock_get_frame_counter (clock);
impl->awaiting_frame = TRUE;
- callback = wl_surface_frame (impl->wl_surface);
+ callback = wl_surface_frame (impl->display_server.wl_surface);
wl_callback_add_listener (callback, &frame_listener, window);
_gdk_frame_clock_freeze (clock);
- wl_surface_commit (impl->wl_surface);
+ wl_surface_commit (impl->display_server.wl_surface);
if (_gdk_wayland_is_shm_surface (impl->cairo_surface))
_gdk_wayland_shm_surface_set_busy (impl->cairo_surface);
}
scale = 1;
- for (l = impl->outputs; l != NULL; l = l->next)
+ for (l = impl->display_server.outputs; l != NULL; l = l->next)
{
guint32 output_scale =
_gdk_wayland_screen_get_output_scale (wayland_display->screen, l->data);
g_assert (_gdk_wayland_is_shm_surface (impl->cairo_surface));
/* Attach this new buffer to the surface */
- wl_surface_attach (impl->wl_surface,
+ wl_surface_attach (impl->display_server.wl_surface,
_gdk_wayland_shm_surface_get_wl_buffer (impl->cairo_surface),
impl->pending_buffer_offset_x,
impl->pending_buffer_offset_y);
/* Only set the buffer scale if supported by the compositor */
display = GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
if (display->compositor_version >= WL_SURFACE_HAS_BUFFER_SCALE)
- wl_surface_set_buffer_scale (impl->wl_surface, impl->scale);
+ wl_surface_set_buffer_scale (impl->display_server.wl_surface, impl->scale);
impl->pending_commit = TRUE;
}
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
/* If we are drawing using OpenGL then we only need a logical 1x1 surface. */
- if (impl->egl_window)
+ if (impl->display_server.egl_window)
{
if (impl->cairo_surface &&
_gdk_wayland_is_shm_surface (impl->cairo_surface))
for (i = 0; i < n; i++)
{
cairo_region_get_rectangle (window->current_paint.region, i, &rect);
- wl_surface_damage (impl->wl_surface, rect.x, rect.y, rect.width, rect.height);
+ wl_surface_damage (impl->display_server.wl_surface, rect.x, rect.y, rect.width, rect.height);
impl->pending_commit = TRUE;
}
}
GdkWindowImplWayland *impl_parent = NULL;
struct xdg_surface *parent_surface;
- if (!impl->xdg_surface)
+ if (!impl->display_server.xdg_surface)
return;
if (impl->transient_for)
if (impl_parent)
{
/* XXX: Is this correct? */
- if (!impl_parent->wl_surface)
+ if (!impl_parent->display_server.wl_surface)
return;
- parent_surface = impl_parent->xdg_surface;
+ parent_surface = impl_parent->display_server.xdg_surface;
}
else
parent_surface = NULL;
- xdg_surface_set_parent (impl->xdg_surface, parent_surface);
+ xdg_surface_set_parent (impl->display_server.xdg_surface, parent_surface);
}
static void
{
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
- if (!impl->xdg_surface)
+ if (!impl->display_server.xdg_surface)
return;
if (!impl->title)
return;
- xdg_surface_set_title (impl->xdg_surface, impl->title);
+ xdg_surface_set_title (impl->display_server.xdg_surface, impl->title);
}
static void
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
gint x, y, width, height;
- if (!impl->xdg_surface)
+ if (!impl->display_server.xdg_surface)
return;
x = impl->margin_left;
width = window->width - (impl->margin_left + impl->margin_right);
height = window->height - (impl->margin_top + impl->margin_bottom);
- xdg_surface_set_window_geometry (impl->xdg_surface, x, y, width, height);
+ xdg_surface_set_window_geometry (impl->display_server.xdg_surface, x, y, width, height);
}
static struct wl_region *
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
struct wl_region *wl_region = NULL;
- if (!impl->wl_surface)
+ if (!impl->display_server.wl_surface)
return;
if (impl->opaque_region != NULL)
wl_region = wl_region_from_cairo_region (GDK_WAYLAND_DISPLAY (gdk_window_get_display (window)),
impl->opaque_region);
- wl_surface_set_opaque_region (impl->wl_surface, wl_region);
+ wl_surface_set_opaque_region (impl->display_server.wl_surface, wl_region);
if (wl_region != NULL)
wl_region_destroy (wl_region);
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
struct wl_region *wl_region = NULL;
- if (!impl->wl_surface)
+ if (!impl->display_server.wl_surface)
return;
if (impl->input_region != NULL)
wl_region = wl_region_from_cairo_region (GDK_WAYLAND_DISPLAY (gdk_window_get_display (window)),
impl->input_region);
- wl_surface_set_input_region (impl->wl_surface, wl_region);
+ wl_surface_set_input_region (impl->display_server.wl_surface, wl_region);
if (wl_region != NULL)
wl_region_destroy (wl_region);
GDK_NOTE (EVENTS,
g_message ("surface enter, window %p output %p", window, output));
- impl->outputs = g_slist_prepend (impl->outputs, output);
+ impl->display_server.outputs = g_slist_prepend (impl->display_server.outputs, output);
window_update_scale (window);
}
GDK_NOTE (EVENTS,
g_message ("surface leave, window %p output %p", window, output));
- impl->outputs = g_slist_remove (impl->outputs, output);
+ impl->display_server.outputs = g_slist_remove (impl->display_server.outputs, output);
window_update_scale (window);
}
(gpointer) on_parent_surface_committed,
window);
- wl_subsurface_set_desync (impl->wl_subsurface);
+ wl_subsurface_set_desync (impl->display_server.wl_subsurface);
}
static void
impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
- if (!impl->wl_surface)
+ if (!impl->display_server.wl_surface)
return; /* Bail out, surface and subsurface will be created later when shown */
- if (impl->wl_subsurface)
+ if (impl->display_server.wl_subsurface)
return;
if (impl->transient_for)
if (parent_impl)
{
display_wayland = GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
- impl->wl_subsurface =
+ impl->display_server.wl_subsurface =
wl_subcompositor_get_subsurface (display_wayland->subcompositor,
- impl->wl_surface, parent_impl->wl_surface);
- wl_subsurface_set_position (impl->wl_subsurface, window->x, window->y);
+ impl->display_server.wl_surface, parent_impl->display_server.wl_surface);
+ wl_subsurface_set_position (impl->display_server.wl_subsurface, window->x, window->y);
/* In order to synchronize the initial position with the initial frame
* content, wait with making the subsurface desynchronized until after
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
- impl->wl_surface = wl_compositor_create_surface (display_wayland->compositor);
- wl_surface_add_listener (impl->wl_surface, &surface_listener, window);
+ impl->display_server.wl_surface = wl_compositor_create_surface (display_wayland->compositor);
+ wl_surface_add_listener (impl->display_server.wl_surface, &surface_listener, window);
gdk_wayland_window_sync_opaque_region (window);
gdk_wayland_window_sync_input_region (window);
impl->initial_fullscreen_monitor < gdk_screen_get_n_monitors (screen))
fullscreen_output = _gdk_wayland_screen_get_wl_output (screen, impl->initial_fullscreen_monitor);
- impl->xdg_surface = xdg_shell_get_xdg_surface (display_wayland->xdg_shell, impl->wl_surface);
- xdg_surface_add_listener (impl->xdg_surface, &xdg_surface_listener, window);
+ impl->display_server.xdg_surface = xdg_shell_get_xdg_surface (display_wayland->xdg_shell, impl->display_server.wl_surface);
+ xdg_surface_add_listener (impl->display_server.xdg_surface, &xdg_surface_listener, window);
gdk_wayland_window_sync_parent (window, NULL);
gdk_wayland_window_sync_title (window);
gdk_wayland_window_sync_margin (window);
if (window->state & GDK_WINDOW_STATE_MAXIMIZED)
- xdg_surface_set_maximized (impl->xdg_surface);
+ xdg_surface_set_maximized (impl->display_server.xdg_surface);
if (window->state & GDK_WINDOW_STATE_FULLSCREEN)
- xdg_surface_set_fullscreen (impl->xdg_surface, fullscreen_output);
+ xdg_surface_set_fullscreen (impl->display_server.xdg_surface, fullscreen_output);
app_id = g_get_prgname ();
if (app_id == NULL)
app_id = gdk_get_program_class ();
- xdg_surface_set_app_id (impl->xdg_surface, app_id);
+ xdg_surface_set_app_id (impl->display_server.xdg_surface, app_id);
maybe_set_gtk_surface_dbus_properties (window);
maybe_set_gtk_surface_modal (window);
int x, y;
int parent_x, parent_y;
- if (!impl->wl_surface)
+ if (!impl->display_server.wl_surface)
return;
- if (!parent_impl->wl_surface)
+ if (!parent_impl->display_server.wl_surface)
return;
gdk_seat = gdk_display_get_default_seat (GDK_DISPLAY (display));
x = window->x - parent_x;
y = window->y - parent_y;
- impl->xdg_popup = xdg_shell_get_xdg_popup (display->xdg_shell,
- impl->wl_surface,
- parent_impl->wl_surface,
+ impl->display_server.xdg_popup = xdg_shell_get_xdg_popup (display->xdg_shell,
+ impl->display_server.wl_surface,
+ parent_impl->display_server.wl_surface,
seat,
_gdk_wayland_device_get_last_implicit_grab_serial (device, NULL),
x, y);
- xdg_popup_add_listener (impl->xdg_popup, &xdg_popup_listener, window);
+ xdg_popup_add_listener (impl->display_server.xdg_popup, &xdg_popup_listener, window);
}
static struct wl_seat *
{
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
- if (impl->xdg_popup || impl->xdg_surface)
+ if (impl->display_server.xdg_popup || impl->display_server.xdg_surface)
return window;
window = impl->transient_for;
{
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
- if (!impl->wl_surface)
+ if (!impl->display_server.wl_surface)
gdk_wayland_window_create_surface (window);
gdk_wayland_window_map (window);
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
GdkWindowImplWayland *parent_impl;
- g_return_if_fail (impl->wl_subsurface);
+ g_return_if_fail (impl->display_server.wl_subsurface);
g_return_if_fail (impl->transient_for);
parent_impl = GDK_WINDOW_IMPL_WAYLAND (impl->transient_for->impl);
- wl_subsurface_destroy (impl->wl_subsurface);
+ wl_subsurface_destroy (impl->display_server.wl_subsurface);
g_signal_handlers_disconnect_by_func (parent_impl,
(gpointer) on_parent_surface_committed,
window);
- impl->wl_subsurface = NULL;
+ impl->display_server.wl_subsurface = NULL;
}
static void
GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
- if (impl->wl_surface)
+ if (impl->display_server.wl_surface)
{
if (impl->dummy_egl_surface)
{
impl->dummy_egl_surface = NULL;
}
- if (impl->dummy_egl_window)
+ if (impl->display_server.dummy_egl_window)
{
- wl_egl_window_destroy (impl->dummy_egl_window);
- impl->dummy_egl_window = NULL;
+ wl_egl_window_destroy (impl->display_server.dummy_egl_window);
+ impl->display_server.dummy_egl_window = NULL;
}
if (impl->egl_surface)
impl->egl_surface = NULL;
}
- if (impl->egl_window)
+ if (impl->display_server.egl_window)
{
- wl_egl_window_destroy (impl->egl_window);
- impl->egl_window = NULL;
+ wl_egl_window_destroy (impl->display_server.egl_window);
+ impl->display_server.egl_window = NULL;
}
- if (impl->xdg_surface)
+ if (impl->display_server.xdg_surface)
{
- xdg_surface_destroy (impl->xdg_surface);
- impl->xdg_surface = NULL;
+ xdg_surface_destroy (impl->display_server.xdg_surface);
+ impl->display_server.xdg_surface = NULL;
}
- else if (impl->xdg_popup)
+ else if (impl->display_server.xdg_popup)
{
- xdg_popup_destroy (impl->xdg_popup);
- impl->xdg_popup = NULL;
+ xdg_popup_destroy (impl->display_server.xdg_popup);
+ impl->display_server.xdg_popup = NULL;
}
- if (impl->wl_subsurface)
+ if (impl->display_server.wl_subsurface)
unmap_subsurface (window);
if (impl->awaiting_frame)
_gdk_frame_clock_thaw (frame_clock);
}
- if (impl->gtk_surface)
+ if (impl->display_server.gtk_surface)
{
- gtk_surface_destroy (impl->gtk_surface);
- impl->gtk_surface = NULL;
+ gtk_surface_destroy (impl->display_server.gtk_surface);
+ impl->display_server.gtk_surface = NULL;
}
- wl_surface_destroy (impl->wl_surface);
- impl->wl_surface = NULL;
+ wl_surface_destroy (impl->display_server.wl_surface);
+ impl->display_server.wl_surface = NULL;
- g_slist_free (impl->outputs);
- impl->outputs = NULL;
+ g_slist_free (impl->display_server.outputs);
+ impl->display_server.outputs = NULL;
if (impl->hint == GDK_WINDOW_TYPE_HINT_DIALOG && !impl->transient_for)
orphan_dialogs = g_list_remove (orphan_dialogs, window);
impl = GDK_WINDOW_IMPL_WAYLAND (window_impl->transient_for->impl);
- if (!impl->wl_surface || impl->pending_commit)
+ if (!impl->display_server.wl_surface || impl->pending_commit)
return;
frame_clock = gdk_window_get_frame_clock (window_impl->transient_for);
window->y = y;
impl->position_set = 1;
- if (impl->wl_subsurface)
+ if (impl->display_server.wl_subsurface)
{
- wl_subsurface_set_position (impl->wl_subsurface, x, y);
+ wl_subsurface_set_position (impl->display_server.wl_subsurface, x, y);
gdk_window_request_transient_parent_commit (window);
}
}
GdkWaylandDisplay *display =
GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
- if (impl->gtk_surface != NULL)
+ if (impl->display_server.gtk_surface != NULL)
return;
- if (impl->xdg_surface == NULL)
+ if (impl->display_server.xdg_surface == NULL)
return;
if (display->gtk_shell == NULL)
return;
- impl->gtk_surface = gtk_shell_get_gtk_surface (display->gtk_shell,
- impl->wl_surface);
+ impl->display_server.gtk_surface = gtk_shell_get_gtk_surface (display->gtk_shell,
+ impl->display_server.wl_surface);
}
static void
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
gdk_wayland_window_init_gtk_surface (window);
- if (impl->gtk_surface == NULL)
+ if (impl->display_server.gtk_surface == NULL)
return;
if (window->modal_hint)
- gtk_surface_set_modal (impl->gtk_surface);
+ gtk_surface_set_modal (impl->display_server.gtk_surface);
else
- gtk_surface_unset_modal (impl->gtk_surface);
+ gtk_surface_unset_modal (impl->display_server.gtk_surface);
}
return;
}
- if (impl->wl_subsurface)
+ if (impl->display_server.wl_subsurface)
unmap_subsurface (window);
previous_parent = impl->transient_for;
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
return;
- if (!impl->xdg_surface)
+ if (!impl->display_server.xdg_surface)
return;
- xdg_surface_set_minimized (impl->xdg_surface);
+ xdg_surface_set_minimized (impl->display_server.xdg_surface);
}
static void
if (GDK_WINDOW_DESTROYED (window))
return;
- if (impl->xdg_surface)
- xdg_surface_set_maximized (impl->xdg_surface);
+ if (impl->display_server.xdg_surface)
+ xdg_surface_set_maximized (impl->display_server.xdg_surface);
else
gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_MAXIMIZED);
}
if (GDK_WINDOW_DESTROYED (window))
return;
- if (impl->xdg_surface)
- xdg_surface_unset_maximized (impl->xdg_surface);
+ if (impl->display_server.xdg_surface)
+ xdg_surface_unset_maximized (impl->display_server.xdg_surface);
else
gdk_synthesize_window_state (window, GDK_WINDOW_STATE_MAXIMIZED, 0);
}
if (GDK_WINDOW_DESTROYED (window))
return;
- if (impl->xdg_surface)
- xdg_surface_set_fullscreen (impl->xdg_surface, fullscreen_output);
+ if (impl->display_server.xdg_surface)
+ xdg_surface_set_fullscreen (impl->display_server.xdg_surface, fullscreen_output);
else {
gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FULLSCREEN);
impl->initial_fullscreen_monitor = monitor;
impl->initial_fullscreen_monitor = -1;
- if (impl->xdg_surface)
- xdg_surface_set_fullscreen (impl->xdg_surface, NULL);
+ if (impl->display_server.xdg_surface)
+ xdg_surface_set_fullscreen (impl->display_server.xdg_surface, NULL);
else
gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FULLSCREEN);
}
impl->initial_fullscreen_monitor = -1;
- if (impl->xdg_surface)
- xdg_surface_unset_fullscreen (impl->xdg_surface);
+ if (impl->display_server.xdg_surface)
+ xdg_surface_unset_fullscreen (impl->display_server.xdg_surface);
else
gdk_synthesize_window_state (window, GDK_WINDOW_STATE_FULLSCREEN, 0);
}
impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
- if (!impl->xdg_surface)
+ if (!impl->display_server.xdg_surface)
return;
serial = _gdk_wayland_device_get_last_implicit_grab_serial (GDK_WAYLAND_DEVICE (device),
&sequence);
- xdg_surface_resize (impl->xdg_surface,
+ xdg_surface_resize (impl->display_server.xdg_surface,
gdk_wayland_device_get_wl_seat (device),
serial, resize_edges);
impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
- if (!impl->xdg_surface)
+ if (!impl->display_server.xdg_surface)
return;
serial = _gdk_wayland_device_get_last_implicit_grab_serial (GDK_WAYLAND_DEVICE (device),
&sequence);
- xdg_surface_move (impl->xdg_surface,
+ xdg_surface_move (impl->display_server.xdg_surface,
gdk_wayland_device_get_wl_seat (device),
serial);
if (sequence)
return FALSE;
}
- if (!impl->xdg_surface)
+ if (!impl->display_server.xdg_surface)
return FALSE;
device = GDK_WAYLAND_DEVICE (gdk_event_get_device (event));
seat = gdk_wayland_device_get_wl_seat (GDK_DEVICE (device));
gdk_event_get_coords (event, &x, &y);
- xdg_surface_show_window_menu (impl->xdg_surface,
+ xdg_surface_show_window_menu (impl->display_server.xdg_surface,
seat,
_gdk_wayland_device_get_implicit_grab_serial (device, event),
x, y);
{
g_return_val_if_fail (GDK_IS_WAYLAND_WINDOW (window), NULL);
- return GDK_WINDOW_IMPL_WAYLAND (window->impl)->wl_surface;
+ return GDK_WINDOW_IMPL_WAYLAND (window->impl)->display_server.wl_surface;
}
static struct wl_egl_window *
{
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
- if (impl->egl_window == NULL)
+ if (impl->display_server.egl_window == NULL)
{
- impl->egl_window =
- wl_egl_window_create (impl->wl_surface,
+ impl->display_server.egl_window =
+ wl_egl_window_create (impl->display_server.wl_surface,
impl->wrapper->width * impl->scale,
impl->wrapper->height * impl->scale);
- wl_surface_set_buffer_scale (impl->wl_surface, impl->scale);
+ wl_surface_set_buffer_scale (impl->display_server.wl_surface, impl->scale);
}
- return impl->egl_window;
+ return impl->display_server.egl_window;
}
EGLSurface
if (impl->dummy_egl_surface == NULL)
{
- impl->dummy_egl_window =
- wl_egl_window_create (impl->wl_surface, 1, 1);
+ impl->display_server.dummy_egl_window =
+ wl_egl_window_create (impl->display_server.wl_surface, 1, 1);
impl->dummy_egl_surface =
- eglCreateWindowSurface (display->egl_display, config, impl->dummy_egl_window, NULL);
+ eglCreateWindowSurface (display->egl_display, config, impl->display_server.dummy_egl_window, NULL);
}
return impl->dummy_egl_surface;
impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
- if (!impl->wl_surface)
+ if (!impl->display_server.wl_surface)
gdk_wayland_window_create_surface (window);
impl->use_custom_surface = TRUE;
return;
gdk_wayland_window_init_gtk_surface (window);
- if (impl->gtk_surface == NULL)
+ if (impl->display_server.gtk_surface == NULL)
return;
- gtk_surface_set_dbus_properties (impl->gtk_surface,
+ gtk_surface_set_dbus_properties (impl->display_server.gtk_surface,
impl->application.application_id,
impl->application.app_menu_path,
impl->application.menubar_path,